package com.smart.platform.toolkit;

/**
 * 操作系统类： 获取System.getProperty("os.name")对应的操作系统
 * 
 * @author isea533
 */
public class OSInfoUtil
{
    private static String OS = System.getProperty("os.name").toLowerCase();
    
    private static OSInfoUtil _instance = new OSInfoUtil();
    
    private OSName platform;
    
    private OSInfoUtil()
    {
    }
    
    public static String retSystemPath(String winPath,String linuxPath)
    {
        if (OSInfoUtil.isWindows())
        {
            return winPath;
        }
        else
        {
            return linuxPath;
        }
    }
    
    public static boolean isLinux()
    {
        return OS.indexOf("linux") >= 0;
    }
    
    public static boolean isMacOS()
    {
        return OS.indexOf("mac") >= 0 && OS.indexOf("os") > 0 && OS.indexOf("x") < 0;
    }
    
    public static boolean isMacOSX()
    {
        return OS.indexOf("mac") >= 0 && OS.indexOf("os") > 0 && OS.indexOf("x") > 0;
    }
    
    public static boolean isWindows()
    {
        return OS.indexOf("windows") >= 0;
    }
    
    public static boolean isOS2()
    {
        return OS.indexOf("os/2") >= 0;
    }
    
    public static boolean isSolaris()
    {
        return OS.indexOf("solaris") >= 0;
    }
    
    public static boolean isSunOS()
    {
        return OS.indexOf("sunos") >= 0;
    }
    
    public static boolean isMPEiX()
    {
        return OS.indexOf("mpe/ix") >= 0;
    }
    
    public static boolean isHPUX()
    {
        return OS.indexOf("hp-ux") >= 0;
    }
    
    public static boolean isAix()
    {
        return OS.indexOf("aix") >= 0;
    }
    
    public static boolean isOS390()
    {
        return OS.indexOf("os/390") >= 0;
    }
    
    public static boolean isFreeBSD()
    {
        return OS.indexOf("freebsd") >= 0;
    }
    
    public static boolean isIrix()
    {
        return OS.indexOf("irix") >= 0;
    }
    
    public static boolean isDigitalUnix()
    {
        return OS.indexOf("digital") >= 0 && OS.indexOf("unix") > 0;
    }
    
    public static boolean isNetWare()
    {
        return OS.indexOf("netware") >= 0;
    }
    
    public static boolean isOSF1()
    {
        return OS.indexOf("osf1") >= 0;
    }
    
    public static boolean isOpenVMS()
    {
        return OS.indexOf("openvms") >= 0;
    }
    
    /**
     * 获取操作系统名字
     * 
     * @return 操作系统名
     */
    public static OSName getOSname()
    {
        if (isAix())
        {
            _instance.platform = OSName.AIX;
        }
        else if (isDigitalUnix())
        {
            _instance.platform = OSName.Digital_Unix;
        }
        else if (isFreeBSD())
        {
            _instance.platform = OSName.FreeBSD;
        }
        else if (isHPUX())
        {
            _instance.platform = OSName.HP_UX;
        }
        else if (isIrix())
        {
            _instance.platform = OSName.Irix;
        }
        else if (isLinux())
        {
            _instance.platform = OSName.Linux;
        }
        else if (isMacOS())
        {
            _instance.platform = OSName.Mac_OS;
        }
        else if (isMacOSX())
        {
            _instance.platform = OSName.Mac_OS_X;
        }
        else if (isMPEiX())
        {
            _instance.platform = OSName.MPEiX;
        }
        else if (isNetWare())
        {
            _instance.platform = OSName.NetWare_411;
        }
        else if (isOpenVMS())
        {
            _instance.platform = OSName.OpenVMS;
        }
        else if (isOS2())
        {
            _instance.platform = OSName.OS2;
        }
        else if (isOS390())
        {
            _instance.platform = OSName.OS390;
        }
        else if (isOSF1())
        {
            _instance.platform = OSName.OSF1;
        }
        else if (isSolaris())
        {
            _instance.platform = OSName.Solaris;
        }
        else if (isSunOS())
        {
            _instance.platform = OSName.SunOS;
        }
        else if (isWindows())
        {
            _instance.platform = OSName.Windows;
        }
        else
        {
            _instance.platform = OSName.Others;
        }
        return _instance.platform;
    }
}